package thread.dn;

/**
 * 创建线程任务对象，其类型为其类型为Runnable类型，
 * 然后创建Thread对象，将Runnable类型的任务对象交给Thread对象
 * 这种方式是我们经常推荐的一种方式，实现线程对象与任务对象的解偶，更加灵活。
 */
class ThreadTask1 implements Runnable {
    @Override
    public void run() {
        String tName = Thread.currentThread().getName();
        while (true) {
            System.out.println(tName + "->task01");
        }
    }
}

class ThreadTask2 implements Runnable {
    @Override
    public void run() {
        String tName = Thread.currentThread().getName();
        while (true) {
            System.out.println(tName + "->task02");
        }
    }
}

public class ThreadDemo02 {
    public static void main(String[] args) {
        //获取main方法运行在哪个线程，这个线程名字是什么
        System.out.println(Thread.currentThread().getName());
        //创建两个新的任务对象(类型为Runnable类型)
        ThreadTask1 task1 = new ThreadTask1();
        ThreadTask2 task2 = new ThreadTask2();
        //创建两个新的线程对象，并将任务交给线程对象
        Thread t1 = new Thread(task1);
        Thread t2 = new Thread(task2);
        //启动线程对象
        t1.start();//线程启动后获取了CPU会执行自己的run方法
        t2.start();

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                String tName = Thread.currentThread().getName();
                while (true) {
                    System.out.println(tName + "->task03");
                }
            }
        });
        t3.start();

        Thread t4 = new Thread(() -> {
            String tName = Thread.currentThread().getName();
            while (true) {
                System.out.println(tName + "->task04");
            }
        });
        t4.start();
    }
}
